<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>javascript 阶段</title>
</head>
<body>
    <h3> __proto__ 和 constructor (构造函数属性)</h3>

    <script>

        // Array 数组构造函数

        // 原型
        // prototype 这个属性是每个构造函数都有的属性

        // 隐式原型
        // __proto__ 这个属性是每个实例对象都有的属性 [[prototype]]

        // 构造属性
        // constructor 这个属性可以找出原型所属的构造函数


        // 1.0 原型
        console.log(Array.prototype);

        // 2.0 隐式原型
        // 实例对象
        var arr = new Array();
        console.log(arr.__proto__);

        // 3.0 构造函数的原型和实例对象的隐式原型是全等于关系
        // 为什么实例可以引用原型的属性和方法?
        // 是因为构造函数的原型和实例对象的隐式原型的关系决定
        console.log(arr.__proto__ === Array.prototype);// true

        // 4.0 每个原型都有的属性constructor
        // 能够根据这个属性找出原型所属的构造函数
        console.log(Array.prototype.constructor);// Array
        console.log(Array.prototype.constructor === Array);// true
        console.log(arr.__proto__.constructor);// Array
        console.log(arr.__proto__.constructor === Array);// true






    </script>
</body>
</html>